﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//递归
//1.计算n的阶乘（不考虑溢出），n的阶乘就是1~n的数字累积相乘
//n=0   f(n)=1
//n>0    n！=  n ∗ (n − 1)!    即f(n)=n*f(n-1)
int fib(int n)
{
	if (n==0)
	{
		return 1;
	}
	else if(n>0)
	{
		return n * fib(n - 1);
	}
}
int main1()
{
	int n = 0;
	printf("请输入你要计算谁的阶乘：");
	scanf("%d", &n);
	int ret=fib(n);  //计算阶乘
	printf("计算结果为：>%d",ret);
}




//2.输⼊⼀个整数m，按照顺序打印整数的每⼀位。
int print(int n)
{

	if (n > 9)
	{
		print(n / 10);
	}
	printf("%d ",n % 10);
}
int main2()
{
	int n = 0;
	printf("请输入整数：");
	scanf("%d", &n);
	int ret = print(n);  //输出每一位
}

//请输入整数：12345
//1 2 3 4 5

//3.计算输出第n个斐波那契数列
//法一
//n<=2  f=1
//n>2   f(n)=f(n-1)+f(n-2)
int f(int n)
{
	if (n <= 2)
	{
		return 1;
	}
	else
	{
		return f(n - 1) + f(n - 2);
	}
}
int main3()
{
	int n = 0;
	printf("请输入n：");
	scanf("%d", &n);
	int ret = f(n);  //输出每一位
	printf("%d", ret);
}
//法二
//令a=1  b=1   c=1  
//算第三  则 c=a+b=2
//之后c与b   a与b换 
//反复
int fi(int n)
{
	int a, b = 1;
	//令c等于1   n=1,2则默认返回1
	int c = 1;
	if (n > 2)
	{
		c = a + b;
		a = b;
		b = c;
	}
	return c;
}
int main3()
{
	int n = 0;
	printf("请输入n：");
	scanf("%d", &n);
	int ret = fi(n);  //输出每一位
	printf("%d", ret);
}